<?php
/**
 *  Funções para uso geral, que ajudam no desenvolvimento do seu projeto com
 *  o Spaghetti, facilitando na vizualização e comparação dos dados.
 *
 *  @license   http://www.opensource.org/licenses/mit-license.php The MIT License
 *  @copyright Copyright 2008-2009, Spaghetti* Framework (http://spaghettiphp.org/)
 *
 */

/**
 *  Exibe os dados repassados para processamento visual.
 *
 *  @param array $data Dados a serem observados
 *  @return void
 */
function pr($data) {
    echo "<pre>" . print_r($data, true) . "</pre>";
}

/**
 *  Retorna os dados enviados em forma de string para exibí-los no navegador.
 * 
 *  @param array $data Dados a serem observados
 *  @return void
 */
function dump($data) {
    pr(var_export($data, true));
}

/**
 *  Limpa o valor de um índice do array repassado, retornando-o.
 *
 *  @param array $array Array a ser utilizado
 *  @param string $index Índice a ser utilizado
 *  @return array Item removido
 */
function array_unset(&$array = array(), $index = "") {
    $item = $array[$index];
    unset($array[$index]);
    return $item;
}

/**
 *  Verifica se um método é público para o objeto em questão.
 *
 *  @param object $object Objeto a ser analisado
 *  @param string $method Método a ser verificado
 *  @return boolean Verdadeiro para público
 */
function can_call_method(&$object, $method) {
    if(method_exists($object, $method)):
        $method = new ReflectionMethod($object, $method);
        return $method->isPublic();
    endif;
    return false;
}

/**
  *  Cria um array preenchido com uma sequência.
  *
  *  @param integer $min Valor mínimo
  *  @param integer $max Valor máximo
  *  @return array Sequência
  */
function array_range($min, $max) {
    $result = array();
    for($i = $min; $i < $max + 1; $i++):
        $result[$i] = $i;
    endfor;
    return $result;
}

/**
  *  Função para envio de e-mail com o PHPMailer.
  *
  *  @param string $psEmailPara Endereço para qual será enviado o e-mail
  *  @param string $psAssunto Assunto do e-mail
  *  @param string $psCorpo Corpo do e-mail
  *  @param string [$psEmailDe] Endereço a partir de qual será enviado os e-mails
  *  @param string [$psNome] Nome de qual será enviado os e-mails
  *  @return 
  */
function enviarEmail( $psEmailPara, $psAssunto, $psCorpo, $psEmailDe = null, $psNome = false )
{
	$sEmailDe = ( $psEmailDe == null ) ? SMTP_USER : $psEmailDe;
	$sNome = ( $psNome == null ) ? SMTP_NAME : $psNome;
 
	require_once dirname(__FILE__).'/../app/lib/phpmailer/class.phpmailer.php';

	$objMail = new PHPMailer();
	
	$objMail->IsSMTP();
	$objMail->SMTPDebug  = 1;
	$objMail->CharSet    = 'UTF-8';
    $objMail->SMTPSecure = "ssl";
	$objMail->SMTPAuth   = true;
	$objMail->Host       = SMTP_HOST;
	$objMail->Port       = 465;
	$objMail->Username   = SMTP_USER;
	$objMail->Password   = SMTP_PASS;
        
	$objMail->SetFrom( $sEmailDe, $sNome );

	$objMail->Subject    = $psAssunto;
	$objMail->AltBody    = "To view the message, please use an HTML compatible email viewer!";

	$objMail->MsgHTML( $psCorpo );

	$objMail->AddAddress( $psEmailPara );
      //  echo "<pre>".print_r($objMail->IsSendmail(), true)."</pre>";
 
 //echo "<pre>".print_r($objMail, true)."</pre>";
	
       $objMail->Send();
     //   return $objMail;
}

/**
 * Inverte a data para padrão de banco de dados ou vice-versa
 * @access public
 * @param string $psData Data para ser manipulada
 * @param string $psPara O elemento pelo qual vai ser trocado quando manipulada
 * @param bool $pbTemHora Indica se o retorno vai receber a hora anexada
 * @return string Data invertida
 */
function inverterData($psData, $psPara, $pbTemHora=false)
{
	if($psPara=='-')
	{
		$sPara = '-';
		$sDe = '/';
	}
	else
	{
		$sPara = '/';
		$sDe = '-';
	}
	
	if($pbTemHora)
	{
		return implode($sPara,array_reverse(explode($sDe,reset(explode(' ',$psData))))).' '.end(explode(' ',$psData));
	}
	else
	{
		return implode($sPara,array_reverse(explode($sDe,$psData)));
	}
}

/**
 * Calcula a diferença entre duas datas 
 * @access public
 * @param string $psDataMaior Valor da maior data
 * @param string $psDataMenor Valor da menor data
 * @param bool $pbTime Indica se o valor da data está em timestamp ou não
 * @return string Data formatada: 00d 00h 00m
 */
function difData($psDataMaior, $psDataMenor, $pbTime=false)
{
	if($pbTime)
	{
		$sDif = $psDataMaior - $psDataMenor;
	}
	else
	{
		$sDif = strtotime($psDataMaior)-strtotime($psDataMenor);
	}
	
	$sDif = ($sDif/60/60);
	
	if($sDif > 24)
	{
		$sDif = ($sDif/24);
		$sDias = (int) $sDif;
		
		$sDif = $sDif - ((int) $sDif);
		$sDif = ($sDif*24);
		$sHoras = (int) $sDif;
		
		$sDif = $sDif - ((int) $sDif);
		$sDif = ($sDif*60);
		$sMinutos = ceil($sDif);
		
		return $sDias.'d '.$sHoras.'h '.$sMinutos.'m';
	}
	else
	{
		if($sDif > 1)
		{
			$sHoras = (int) $sDif;

			$sDif = $sDif - ((int) $sDif);
			$sDif = ($sDif*60);
			$sMinutos = ceil($sDif);

			return $sHoras.'h '.$sMinutos.'m';
		}
		else
		{
			$sDif = ($sDif*60);
			$sMinutos = ceil($sDif);
			
			return $sMinutos.'m';
		}
	}
}

function gerarSenha()
{
	return strtoupper( substr( md5( time() ), rand( 0,23 ), 8 ) );
}

?>